package kgame5.k3d.core.obj3d.node3d.animator {
import kgame5.k3d.core.math.Vector3D;
import kgame5.k3d.core.obj3d.info.geometry.Face3D;
import kgame5.k3d.core.obj3d.node3d.Node3D;

/**
 * @author kangkai
 * 这个做的是绑定一个武器和三角面 
 * 原理是v0,v1,v2,
 * v0为绑定点，v0~v1是V3D_UP，是枪背部朝向,法线方向是枪口朝向
 * 
 * 注意这里绑定的和被绑定的是在一个坐标系里
 * 比如girl是在局部坐标系O中，则绑定的武器也在局部坐标系O中。
 * girl和gun属于同一个Group3D.这样能避免世界矩阵的变换
 */
public class FaceLink {
	private var _face:Face3D;//绑定物体的那个面
	private var _gun:Node3D;//被绑定的东西
	
	//构造lookat需要的东西
	private var _posi:Vector3D=new Vector3D();//lookAt的原点
	private var _aim:Vector3D=new Vector3D();//lookAt的目标
	private var _up:Vector3D=new Vector3D();//lookAt的up
	
	public function set face(f:Face3D):void{
		_face=f;
		
	}

	public function set gun(g:Node3D):void{
		_gun=g;
	}
	public function update():void{
		if(_face==null||_gun==null){
			return;
		}
		
//		//TODO 这里是调试信息
//		_face.bDebug=true;//绑定的面显示绑定的颜色
		
		//原点
		_posi.x=_face.v0.x;
		_posi.y=_face.v0.y;
		_posi.z=_face.v0.z;
		//目标
		_face.updateNormal();
		_aim.copy(_face.normal);
		_aim.add(_posi);
		
		//_up
		_up.x=_face.v1.x - _face.v0.x;
		_up.y=_face.v1.y - _face.v0.y;
		_up.z=_face.v1.z - _face.v0.z;
		
		//-执行lookAt(矩阵的每一行可以看做是变换后的基向量)
		_gun.ti.setupLookAt(_posi, _aim, _up);
		
	}
}
}
